package org.dromara.setting.domain.base;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.therapi.runtimejavadoc.FieldJavadoc;
import com.github.therapi.runtimejavadoc.RuntimeJavadoc;
import org.dromara.common.core.utils.reflect.ReflectUtils;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;

/**
 * @author heyi
 * 2024/8/10
 */
public class BaseSetting {

    /**
     * 通过注释来实现属性+字段说明
     * field(key):downloadFile合法域名(keyDesc):小程序账号登录微信公众平台，点击开发>开发设置->服务器域名，填写https协议域名(remark)
     * @return
     */
    public List<KvItem> toKvItemList() {
        Field[] fields =
            ReflectUtils.getFields(getClass());
        return Arrays.stream(fields).map(field -> {
            FieldJavadoc fieldJavadoc = RuntimeJavadoc.getJavadoc(field);
            KvItem kvItem = new KvItem();
            kvItem.setKey(fieldJavadoc.getName());
            kvItem.setRemark("");
            List<String> split = StrUtil.split(fieldJavadoc.getComment().toString(), ":");
            if (CollUtil.size(split) >= 1) {
                kvItem.setKeyDesc(split.get(0));
            }
            if (CollUtil.size(split) > 1) {
                kvItem.setRemark(split.get(1));
            }
            String format = "{}(\"{}\", \"{}\", \"{}\")";
            kvItem.setEnumField(StrUtil.format(format,
                StrUtil.toUnderlineCase(kvItem.getKey()).toUpperCase(),
                kvItem.getKey(),
                kvItem.getKeyDesc(),
                kvItem.getRemark()));
            return kvItem;
        }).toList();
    }


    public void outEnums() {
        List<KvItem> kvItemList = toKvItemList();
        for (int i = 0; i < kvItemList.size(); i++) {
            if (i < kvItemList.size()-1) {
                System.out.println(kvItemList.get(i).getEnumField() + ",");
            }
            else {
                System.out.println(kvItemList.get(i).getEnumField());
            }
        }
    }
}
